package cn.hp.controller;
import cn.hp.common.constant.Constants;
import cn.hp.entity.DictType;
import cn.hp.service.DictTypeService;
import cn.hp.util.RandomNumber;
import cn.hp.util.RedisUtil;
import cn.hp.util.Result;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import org.aspectj.weaver.ast.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/api/dictType")
public class DictTypeController {
    /**
     * 200 连接成功
     * 400 连接失败
     * 404 无法找到请求的资源（页面），说明前端url存在问题 （html有问题）
     * 500 服务器端出现错误， 说明后端代码存在问题 （java有问题）
     */
    @Autowired
    private DictTypeService dictTypeService;
    @Resource
    private RedisUtil redisUtil;
    /**
     * 查询字典类型
     * @param dictType
     * @return
     */
    @GetMapping
    public Result find(DictType dictType){
// 先检查redis缓存,查看redis缓存中是否存在字典类型,DICTTYPE_KEY
// 如果存在，直接从缓存中获取
// 如果不存在，连接数据库，从数据库中查询出来，并放入缓存中
// 如果redis中没有DICTTYPE_KEY
        if (!redisUtil.hasKey(Constants.DICTTYPE_KEY)){
            // 将字典类型从数据库中查出
            List<DictType> dictTypeList =
                    dictTypeService.selectDictType(dictType);
// 放入redis进行缓存
            redisUtil.set(Constants.DICTTYPE_KEY,
                    JSON.toJSONString(dictTypeList), RandomNumber.randomNum(null));
        }
// 如果redis中有DICTTYPE_KEY,从缓存中取出DICTTYPE_KEY
        Object obj = redisUtil.get(Constants.DICTTYPE_KEY);
// 解析obj字符串为对象
        List<DictType> list = JSON.parseArray((String) obj, DictType.class);
        return Result.success(list);
    }
    @RequestMapping("/page")
    public Result page(DictType dictType, @RequestParam(value = "page",
            defaultValue = "1") Integer page,@RequestParam(value = "limit", defaultValue =
            "10") Integer limit) {
        PageInfo<DictType> dictTypePageInfo =
                dictTypeService.selectDictType(dictType, page, limit);
        return Result.success(dictTypePageInfo);
    }
    @PostMapping
    public Result insert(@RequestBody DictType dictType) {
        redisUtil.del(Constants.DICTTYPE_KEY);
        int i = dictTypeService.insertDictType(dictType);
        return i > 0 ? Result.success("添加成功") : Result.error("添加失败");
    }
    @PutMapping
    public Result update(@RequestBody DictType dictType) {
        redisUtil.del(Constants.DICTTYPE_KEY);
        int i = dictTypeService.updateDictType(dictType);
        return i > 0 ? Result.success("修改成功") : Result.error("修改失败");
    }
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id ) {
        redisUtil.del(Constants.DICTTYPE_KEY);
        int i = dictTypeService.deleteDictTypeById(id);
        return i > 0 ? Result.success("删除成功") : Result.error("删除失败");
    }
}